//引入express模块
const express = require('express');
//创建路由器对象
const r = express.Router();
//引入连接池
const pool = require('../pool.js');
//1.用户注册接口(post /reg)
//请求方法:post
//地址:http://127.0.0.1:8080/v1/users/reg
r.post('/reg',(req,res,next)=>{
	//1.1获取post请求的数据
    let obj = req.body;
	console.log(obj);
	//1.2验证数据是否为空
	//{code:401,msg:'用户名不能为空'}
	if(!obj.uname){
	res.send({code:401,msg:'用户名不能为空'});
	//阻止往后执行
	return;}
	if(!obj.upwd){
	res.send({code:402,msg:'密码不能为空'});
	return;
	}
	if(!obj.email){
	res.send({code:403,msg:'邮箱不能为空'});
	return;
	}
    if(!obj.phone){
	res.send({code:404,msg:'手机不能为空'});
	return;
	}
	//验证手机号码格式
	if(!/^1[3-9]\d{9}$/.test(obj.phone)){
		res.send({code:405,msg:'手机号码格式不正确'});
		return;
	}
	//1.3执行SQL命令,插入数据
	pool.query('insert into xz_user set ?',[obj],(err,result)=>{
		if(err){
			//如果有错误,抛给下一个错误处理中间件
			next(err);
			return;
		}
		console.log(result);
		//如果没有错误
		res.send({code:200,msg:'注册成功'});
	});
});
//2.用户登录(post/login)
//地址:http://127.0.0.1:8080/v1/users/login
r.post('/login',(req,res,next)=>{
 //2.1获取post请求的数据
   let obj = req.body;
   console.log(obj);
 //2.2验证数据是否为空
 //{code:401,msg:'用户名不能为空'}
	if(!obj.uname){
	res.send({code:401,msg:'用户名不能为空'});
	//阻止往后执行
	return;}
	if(!obj.upwd){
	res.send({code:402,msg:'密码不能为空'});
	return;
	}
  //2.3执行SQL命令
 pool.query('select * from xz_user where uname = ? and upwd = ? ',[obj.uname,obj.upwd],(err,result)=>{
	if(err){
		next(err);
		return;
	}
	console.log(result);
	//结果是数据,如果数组的长度为0,说明登录失败,否则登录成功
	if(result.length===0){
		res.send({code:201,msg:'登录失败'});
	}else{
	res.send({code:200,msg:'登录成功'});
	}
  });
});
//3.修改用户(put/)
//地址:http://127.0.0.1:8080/v1/users/
r.put('/',(req,res,next)=>{
	//3.1获取post请求的数据
	let obj = req.body;
	console.log(obj);
    //3.2验证数据是否为空
    //遍历对象得到每个属性
	let i =400;//初始化,保存状态码
	for(let k in obj){
		//每次循环,i加1
		i++;
		//console.log(k,obj[k]);
        //判断属性值是否为空,如果为空则提示该属性名不能为空
		if(!obj[k]){
			res.send({code:i,msg:k+'不能为空'});
			return;
		}
	 }
	//3.3执行SQL命令
  pool.query('update xz_user set ? where uid= ?',[obj,obj.uid],(err,result)=>{
	if(err){
		//如果有错误,抛给下一个中间件
		next(err);
		//阻止往后执行
		return;
	}
     console.log(result);
	  //结果是对象,判断对象下的affectedRows,如果是0说明修改失败,否则修改成功
	 if (result.affectedRows===0){
		res.send({code:201,msg:'修改失败'});
	 }else{
		res.send({code:200,msg:'修改成功'});
	 }
  });
});
//4.用户列表(get/)
//请求方法:get
//地址:http://127.0.0.1:8080/v1/users
r.get('/',(req,res,next)=>{
	//4.1获取get传递的数据
	let obj = req.query;
	console.log(obj);
	//4.2如果页码和每页数据为空设置默认值
	if(!obj.pno) obj.pno=1;
	if(!obj.count) obj.count=5;
	console.log(obj);
	//4.3计算开始查询的值(隐式转换为数值型)
	let start = (obj.pno-1)*obj.count;
	//4.4要将每页的数据量转为数值型
	let size = parseInt(obj.count);
	//4.5执行SQL命令
	pool.query('select uid,uname,email,phone from xz_user limit ?,?',[start,size],(err,result)=>{
		if(err){
			next(err);
			return;
		}
		console.log(result);
		res.send({code:200,msg:'查询成功',data:result});
	});
});
//5.删除用户(delete/编号)
//请求方法:delete
//地址:http://127.0.0.1:8080/v1/users/5
r.delete('/:uid',(req,res,next)=>{
	//5.1获取数据
    let obj = req.params;
	console.log(obj);
	//5.2执行SQL命令
    pool.query('delete from xz_user where uid = ?',[obj.uid],(err,result)=>{
		if(err){
			next(err);
			return;
		}
		console.log(result);
		//结果是对象,判断对象下的affectedRows,如果是0删除失败,否则删除成功
		if(result.affectedRows===0){
		res.send({code:201,msg:'删除失败'});}else{
		res.send({code:200,msg:'删除成功'});
		}
    });
});
//6.查找用户(get /编号)
//请求方法:get
//地址:http://127.0.0.1:8080/v1/users/5
r.get('/:uid',(req,res,next)=>{
	//6.1获取路由传参的数据
    let obj = req.params;
	console.log(obj);
	//6.2执行SQL命令
    pool.query('select * from xz_user where uid = ?',[obj.uid],(err,result)=>{
		if(err){
			next(err);
			return;
		}
		console.log(result);
		//结果为数组,如果数组长度为0,说明该用户不存在,否则查询成功
        if(result.length===0){
		res.send({code:201,msg:'该用户不存在'});
        }else{
		res.send({code:200,msg:'查询成功',data:result});
        }
    });
});



//导出路由器对象
module.exports = r;